package com.dqyt.khjc.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @author 王植平
 * @version 1.0
 * @date 创建时间：2019年12月11日 上午10:07:55
 * @parameter
 * @return
 * @since
 */
public class MyJedisPool {

    // 服务器IP地址 测试环境
    private static String ADDR = "1.15.22.139";
    // 服务器IP地址  正式环境
    //private static String ADDR = "localhost";
    // 端口
    private static int PORT = 6379;
    // 密码
    private static String AUTH = "redis990123719@wqewqWQEQW";
    // 连接实例的最大连接数
    private static int MAX_ACTIVE = 1024;
    // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例，默认值也是8。
    private static int MAX_IDLE = 200;
    // 等待可用连接的最大时间，单位毫秒，默认值为-1，表示永不超时。如果超过等待时间，则直接抛出JedisConnectionException
    private static int MAX_WAIT = 10000;
    // 连接超时的时间
    private static int TIMEOUT = 10000;
    // 在borrow一个jedis实例时，是否提前进行validate操作；如果为true，则得到的jedis实例均是可用的；
    private static boolean TEST_ON_BORROW = true;
    // 数据库模式是4个数据库 0~3

    //正式环境:1
    public static final int DEFAULT_DATABASE = 1;

    //测试环境:2
    //public static final int DEFAULT_DATABASE = 3;

    // 使用配置创建连接池
    private static JedisPool pool = null;

    /**
     * 过期时间管理类
     */
    public static final String TIME_MANAGE = "TIME_MANAGE";

    /**
     * 初始化
     */
    public static void init() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        // 最大空闲数
        poolConfig.setMaxIdle(MAX_IDLE);
        // 最大连接数
        poolConfig.setMaxTotal(MAX_ACTIVE);
        // 最大等待毫秒数
        poolConfig.setMaxWaitMillis(MAX_WAIT);
        poolConfig.setTestOnBorrow(TEST_ON_BORROW);
        // 使用配置创建连接池
        pool = new JedisPool(poolConfig, ADDR, PORT, TIMEOUT, AUTH, DEFAULT_DATABASE);

        Jedis jedis=  pool.getResource();
        //System.out.println(jedis);
    }

    /**
     * 从连接池中取得连接
     *
     * @return
     */
    public static Jedis getJedis() {
        return pool.getResource();
    }


}